import os
from PIL import Image


def batch_convert_image_format(input_dir, output_dir, output_format=None):
    """
    批量转换图片格式并保存到目标文件夹

    参数:
    input_dir (str): 输入文件夹路径
    output_dir (str): 输出文件夹路径
    output_format (str): 目标格式（如'JPEG', 'PNG'），None表示保持原格式
    """
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)

    # 格式到扩展名的映射
    format_extension_map = {
        'JPEG': 'jpg',
        'PNG': 'png',
        'GIF': 'gif',
        'BMP': 'bmp',
        'TIFF': 'tiff',
        'WEBP': 'webp',
    }

    # 遍历输入目录中的所有文件
    for filename in os.listdir(input_dir):
        input_path = os.path.join(input_dir, filename)

        # 跳过子目录
        if not os.path.isfile(input_path):
            continue

        try:
            with Image.open(input_path) as img:
                # 确定保存格式
                original_format = img.format
                save_format = output_format.upper() if output_format else original_format

                if not save_format:
                    print(f"警告: {filename} 格式无法识别，已跳过")
                    continue

                # 获取文件扩展名
                ext = format_extension_map.get(save_format, save_format.lower())

                # 生成输出路径
                name = os.path.splitext(filename)[0]
                output_filename = f"{name}.{ext}"
                output_path = os.path.join(output_dir, output_filename)

                # 保存图片
                img.save(output_path, format=save_format)
                print(f"转换成功: {filename} -> {output_filename}")

        except Exception as e:
            print(f"处理失败: {filename} - 错误信息: {str(e)}")


# 使用示例
input_folder = r'E:\reptilePic\3Gbizhi'
output_folder = r'E:\reptilePic\images'
batch_convert_image_format(input_folder, output_folder, output_format='JPEG')
